package cn.com.api.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import cn.com.api.entity.ApiT_region;
import cn.com.api.service.ApiT_regionService;
import cn.com.api.service.ApiUploadService;
import cn.com.util.*;

/**
 * 公共接口控制器
 */
@Controller
@RequestMapping(Utils.SYS_API + "common/")
public class ApiCommonController {

	private static Logger logger = LogManager
			.getLogger(ApiCommonController.class.getName());

	@Autowired
	private ApiT_regionService apiT_regionService;
	@Autowired
	private ApiUploadService apiUploadService;

	// // 日志测试
	// @RequestMapping(value = "log4jhello")
	// public void log4jhello() {
	// // ALL<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF
	// logger.entry(); //
	// trace级别的信息，单独列出来是希望你在某个方法或者程序逻辑开始的时候调用，和logger.trace("entry")基本一个意思
	//
	// try {
	// Integer.valueOf("1b");
	// } catch (NumberFormatException e) {
	// // TODO Auto-generated catch block
	// logger.error(e);
	// }
	// logger.error("Did it again!"); // error级别的信息，参数就是你输出的信息
	// logger.info("我是info信息"); // info级别的信息
	// logger.debug("我是debug信息");
	// logger.warn("我是warn信息");
	// logger.fatal("我是fatal信息");
	// logger.log(Level.DEBUG, "我是debug信息"); //
	// 这个就是制定Level类型的调用：谁闲着没事调用这个，也不一定哦！
	// logger.exit(); // 和entry()对应的结束方法，和logger.trace("exit");一个意思
	// }

	/**
	 * 上传文件，返回文件的地址
	 * 
	 * @param files
	 *            文件集合流
	 * @param foldername
	 *            文件存放的文件夹名称
	 * @throws Exception
	 */
	@RequestMapping(value = "uploadFileToQiNiu")
	public void uploadFileToQiNiu(HttpServletRequest request,
			HttpServletResponse response,
			@RequestParam(value = "file") MultipartFile[] files,
			String foldername) throws Exception {
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			List<String> urlList = apiUploadService.uploadFileToQiNiu(files);
			map.put(Utils.RESULT, Utils.RESULT_RC_SUCCESS);
			map.put(Utils.MESSAGE, "操作成功");
			map.put(Utils.DATAS, urlList);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(Util.getStackTraceAsString(e));
			map.put(Utils.RESULT, Utils.RESULT_RC_EXCEPTION);
			map.put(Utils.MESSAGE, "上传失败！");
		}
		JsonUtil.printJson(response, JsonUtil.object2json(map));
	}

	/**
	 * 上传文件，返回文件的地址
	 * 
	 * @param files
	 *            文件集合流
	 * @param foldername
	 *            文件存放的文件夹名称
	 * @throws Exception
	 */
	@RequestMapping(value = "uploadPicToServer")
	public void uploadPicToServer(HttpServletRequest request,
			HttpServletResponse response,
			@RequestParam(value = "file") MultipartFile[] files,
			String foldername) throws Exception {
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			List<String> urlList = apiUploadService.uploadFileToServer(files,
					request, foldername);
			map.put(Utils.RESULT, Utils.RESULT_RC_SUCCESS);
			map.put(Utils.MESSAGE, "操作成功");
			map.put(Utils.DATAS, urlList);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("上传图片异常:" + Util.getStackTraceAsString(e));
			map.put(Utils.RESULT, Utils.RESULT_RC_EXCEPTION);
			map.put(Utils.MESSAGE, "上传失败！");
		}
		JsonUtil.printJson(response, JsonUtil.object2json(map));
	}

	/**
	 * uploadPicBase64 上传图片，返回图片的地址
	 * 
	 * @param imgbase64string
	 *            图片集合流
	 * @param pictureType
	 *            图片后缀
	 * @param foldername
	 *            图片存放的文件夹名称
	 * @throws Exception
	 */
	@RequestMapping(value = "uploadPicBase64")
	public void uploadPicBase64(HttpServletRequest request,
			HttpServletResponse response, String imgbase64string,
			String picturetype, String foldername) throws Exception {
		// base64字符串去除开头的图片信息，保留图片数据
		Map<String, Object> map = new HashMap<String, Object>();
		if (imgbase64string != null && !"".equals(imgbase64string)) {
			System.out.println("====imgbase64string:" + imgbase64string);
			imgbase64string = imgbase64string.substring(imgbase64string
					.indexOf(",") + 1);
			try {
				String urlstr = apiUploadService.uploadBase64Str(
						imgbase64string, picturetype);
				map.put(Utils.RESULT, Utils.RESULT_RC_SUCCESS);
				map.put(Utils.MESSAGE, "操作成功");
				map.put(Utils.DATAS, urlstr);
			} catch (Exception e) {
				e.printStackTrace();
				logger.error(Util.getStackTraceAsString(e));
				map.put(Utils.RESULT, Utils.RESULT_RC_EXCEPTION);
				map.put(Utils.MESSAGE, "上传失败！");
			}
		} else {
			map.put(Utils.RESULT, Utils.RESULT_RC_EXCEPTION);
			map.put(Utils.MESSAGE, "图片信息为空");
		}
		JsonUtil.printJson(response, JsonUtil.object2json(map));
	}

	/**
	 * 获取省市区json格式数据接口
	 * 
	 * @param parent_id
	 *            父节点id(传1时，返回的是全国的省)
	 * @throws Exception
	 */
	@RequestMapping(value = "getAllProvincesRegions")
	public void getAllProvincesRegions(HttpServletRequest request,
			HttpServletResponse response, String parent_id) throws Exception {
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			if (parent_id != null && !"".equals(parent_id)) {
				map.put("parent_id", parent_id);
			}
			List<ApiT_region> list = apiT_regionService.findT_regionByMap(map);
			map.clear();
			map.put(Utils.RESULT, Utils.RESULT_RC_SUCCESS);
			map.put(Utils.MESSAGE, "操作成功");
			map.put(Utils.DATAS, list);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(Util.getStackTraceAsString(e));
			map.put(Utils.RESULT, Utils.RESULT_RC_EXCEPTION);
			map.put(Utils.MESSAGE, "上传失败！");
		}
		JsonUtil.printJson(response, JsonUtil.object2json(map));
	}

	/**
	 * 发短信
	 * 
	 * @throws Exception
	 */
	@RequestMapping(value = "sendMsg")
	public void sendMsg(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		Map<String, Object> map = new HashMap<String, Object>();
		try {

			String sendSMS = SendMsgUtil.sendSMS("您的验证码是：99999。请不要把验证码泄露给其他人。",
					"18505106672", SendMsgUtil.sprdid_notice);
			System.out.println("dagfkehflksegfjse:" + sendSMS);
			map.clear();
			map.put(Utils.RESULT, Utils.RESULT_RC_SUCCESS);
			map.put(Utils.MESSAGE, "操作成功");
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(Util.getStackTraceAsString(e));
			map.put(Utils.RESULT, Utils.RESULT_RC_EXCEPTION);
			map.put(Utils.MESSAGE, "上传失败！");
		}
		JsonUtil.printJson(response, JsonUtil.object2json(map));
	}

	public static void main(String[] args) {

	}
}
